package exam.huawei.string;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

/**
 * 通信误码
 * <p>
 * 信号传播过程中会出现一些误码，不同的数字表示不同的误码ID，取值范围为1~65535，
 * 用一个数组记录误码出现的情况，每个误码出现的次数代表误码频度，
 * 请找出记录中包含频度最高误码的最小子数组长度。
 * <p>
 * 输入描述
 * 误码总数目: 取值范围为0-255，取值为0表示没有误码的情况。
 * 误码出现频率数组: 误码ID范围为1~65535，数组长度为1~1000.
 * <p>
 * 输出描述
 * 包含频率最高的误码最小了数组长度
 */
public class Example10 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

        System.out.println(getResult(arr));
    }

    /**
     * @param arr 误码出现频率数组
     * @return 包含频率最高的误码最小子数组长度
     */
    public static int getResult(int[] arr) {
        HashMap<Integer, ArrayList<Integer>> idxs = new HashMap<>();

        for (int i = 0; i < arr.length; i++) {
            Integer code = arr[i];
            idxs.putIfAbsent(code, new ArrayList<>());
            idxs.get(code).add(i);
        }

        int maxSize = 0;
        int minLen = 0;

        for (ArrayList<Integer> value : idxs.values()) {
            int size = value.size();
            int len = value.get(value.size() - 1) - value.get(0) + 1;

            if (size > maxSize || (size == maxSize && len < minLen)) {
                maxSize = size;
                minLen = len;
            }
        }

        return minLen;
    }
}